package entity

import (
	"context"
	"time"

	"github.com/LyricTian/gin-admin/v7/internal/app/schema"
	"github.com/LyricTian/gin-admin/v7/pkg/util/structure"
	"github.com/jinzhu/gorm"
)

// GetSetDB 获取set存储
func GetSetDB(ctx context.Context, defDB *gorm.DB) *gorm.DB {
	return GetDBWithModel(ctx, defDB, new(Set))
}

// SchemaSet set对象
type SchemaSet schema.Set

// ToSet 转换为set实体
func (a SchemaSet) ToSet() *Set {
	item := new(Set)
	structure.Copy(a, item)
	return item
}

// Set set实体
type Set struct {
	ID        string     `gorm:"column:id;primary_key;size:36;"`
	Name      string     `gorm:"column:name;size:20;"`          // 名称
	Category  string     `gorm:"size:20;column:category;"`      // 分类
	Type      int        `gorm:"column:type;size:11;"`          // 类型(1:公开 2:私有 3:用户 4:商户)
	Key       string     `gorm:"size:20;column:key;"`           // 键
	Value     string     `gorm:"size:100;column:value;"`        // 键值
	Memo      string     `gorm:"column:memo;size:512;"`         // 备注
	Status    int        `gorm:"column:status;size:11;"`        // 状态(1:启用 2:停用)
	Creator   string     `gorm:"column:creator;size:36;index;"` // 创建者
	CreatedAt time.Time  `gorm:"column:created_at;index;"`
	UpdatedAt time.Time  `gorm:"column:updated_at;index;"`
	DeletedAt *time.Time `gorm:"column:deleted_at;index;"`
}

// ToSchemaSet 转换为set对象
func (a Set) ToSchemaSet() *schema.Set {
	item := new(schema.Set)
	structure.Copy(a, item)
	return item
}

// Sets set列表
type Sets []*Set

// ToSchemaSets 转换为set对象列表
func (a Sets) ToSchemaSets() []*schema.Set {
	list := make([]*schema.Set, len(a))
	for i, item := range a {
		list[i] = item.ToSchemaSet()
	}
	return list
}
